from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker, scoped_session
from os import path


# 为模型添加一个对象转字典的方法
def to_dict(self):
    return {c.name: getattr(self, c.name, None) for c in self.__table__.columns}


# sqlalchemy 模型的基类
Base = declarative_base()
Base.to_dict = to_dict

# 定义sqlite文件
file = path.join(path.dirname(__file__), './sqlite.db')
# engine = create_engine('sqlite:///%s?check_same_thread=False' % file, echo=True) # 开启调试
engine = create_engine('sqlite:///%s?check_same_thread=False' % file)

# mysql
# engine = create_engine("mysql+pymysql://root:123456@localhost:3306/db_estate_spider?charset=utf8",
#                        max_overflow=0,  # 超过连接池大小外最多创建的连接
#                        pool_size=8,  # 连接池大小
#                        pool_timeout=30,  # 池中没有线程最多等待的时间，否则报错
#                        pool_recycle=-1  # 多久之后对线程池中的线程进行一次连接的回收（重置）
#                        )

# session工厂方法
SessionFactory = sessionmaker(bind=engine)
# 创建session
session = scoped_session(SessionFactory)


# 根据模型，创建数据表，需要延迟到模型都import之后再调用
def create_table():
    Base.metadata.create_all(engine)
